package com.example.domain.dto;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 通用分页查询条件
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageQuery {
    //默认值
    private Integer pageNum = 1;
    private Integer pageSize = 10;
    //排序字段
    private String sortBy;
    //是否升序
    private Boolean isAsc = true;


    /**
     * 通用分页方法
     */
    public <T> Page<T> toMpPage(OrderItem... items) {
        // 2. 初始化分页对象
        Page<T> page = Page.of(this.pageNum, this.pageSize);

        // 3. 添加排序条件
        if(StrUtil.isNotBlank(this.sortBy)){
            if(this.isAsc){
                page.addOrder(OrderItem.asc(this.sortBy));
            }else{
                page.addOrder(OrderItem.desc(this.sortBy));
            }
        }else if(items != null){
            page.addOrder(items);
        }
        return page;
    }

    /**
     * 默认以update_time 排序
     */
    public <T> Page<T> toMpPage() {
        return this.toMpPage(OrderItem.desc("update_time"));
    }

    /**
     * 不用传对象的排序
     */
    public <T> Page<T> toMpPage(String sortBy, Boolean isAsc) {
        if(StrUtil.isBlank(sortBy)){
            if(isAsc){
                return this.toMpPage(OrderItem.asc(sortBy));
            }else {
                return this.toMpPage(OrderItem.desc(sortBy));
            }
        }
        //如果传入为null，则默认以update_time排序
        return this.toMpPage();
    }
}